package test;

import entity.Person;

import java.lang.reflect.Modifier;

public class GetClassInto {
    public static void main(String[] args) {
        Class clz = Person.class;   // 获取Class实例
        String fullName = clz.getName(); //得到类的完全限定名(包名+类名)
        String simpleName = clz.getSimpleName();  // 得到类名
        System.out.println("以下是 "+fullName+" 类的基本信息 ");
        System.out.println("---------------------------");

        // 获取Person 类所在的包
        Package pkg = clz.getPackage(); // 得到包类
        System.out.println(simpleName+"定义在:"+pkg.getName()+"包中");
        System.out.println("----------------------------");
        // 获取clz所表示的实体(类,接口,基本类型或void)的超类的Class
        // 如果clz表示Object类.一个接口,一个基本类型或void，则返回null
        // 如果clz表示一个数组类。则返回表示该Object类的class实例
        Class superClass = clz.getSuperclass(); // 父类
        System.out.println(simpleName+"类的超类是:"+superClass.getName());
        System.out.println("----------------------------");

        // 获得clz所表示的类或接口实现的接口
        // 如果clz表示一个不实现任何接口的类型或接口，则此方法返回一个长度为0的数组
        // 如果此对象表示一个基本类型或void，则此方法返回一个长度为0的数组
        Class[] interfaces = clz.getInterfaces(); // 实现的接口
        System.out.println(simpleName+"类所实现的接口:");
        for (Class i : interfaces) {
            System.out.println("\t"+i.getName());
        }
        System.out.println("---------------------------");

        // 每个修饰符对应一个int常量，返回的修饰符信息将类所拥有的修饰符
        // 通过与modify类中的常量进行"与"运算即可判断该类型是否拥有某一个修饰符
        int modifier = clz.getModifiers(); // 获取Person 类的实例的访问修饰符
        System.out.println(simpleName+"类的修饰符:");
        if ((modifier & Modifier.PUBLIC) == Modifier.PUBLIC) {
            System.out.println("\t访问修饰符是:public");
        }else{
            System.out.println("\t访问修饰符是:defualt(package)");
        }
        if ((modifier & Modifier.FINAL) == Modifier.FINAL) {
            System.out.println("\t这个类是:final的");
        }
        if ((modifier & Modifier.ABSTRACT) == Modifier.ABSTRACT) {
            System.out.println("\t这是一个抽象类");
        }
        if ((modifier & Modifier.INTERFACE) == Modifier.INTERFACE) {
            System.out.println("\t这是一个接口");
        }

        System.out.println("------------------------------");
    }
}
